package org.healthy.util.umeng;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.healthy.utils.pub.exception.ExceptionEnums;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class UmengPushClient {

    // The user agent
    protected final String USER_AGENT = "Mozilla/5.0";

    // This object is used for sending the post request to Umeng
    protected HttpClient client = new DefaultHttpClient();

    // The host
    protected static final String host = "http://msg.umeng.com";

    // The upload path
    protected static final String uploadPath = "/upload";

    // The post path
    protected static final String postPath = "/api/send";

    public boolean send(UmengNotification msg) {
        HttpPost post = null;
        HttpResponse response = null;
        try {
            client = new DefaultHttpClient();
            String timestamp = Integer.toString((int) (System.currentTimeMillis() / 1000));
            msg.setPredefinedKeyValue("timestamp", timestamp);
            String url = host + postPath;
            String postBody = msg.getPostBody();
            String sign = DigestUtils.md5Hex(("POST" + url + postBody + msg.getAppMasterSecret()).getBytes("utf8"));
            url = url + "?sign=" + sign;
            post = new HttpPost(url);
            post.setHeader("User-Agent", USER_AGENT);
            StringEntity se = new StringEntity(postBody, "UTF-8");
            post.setEntity(se);
            // Send the post request and get the response
            response = client.execute(post);
            int status = response.getStatusLine().getStatusCode();
            System.out.println("Response Code : " + status);
            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            StringBuffer result = new StringBuffer();
            String line = "";
            while ((line = rd.readLine()) != null) {
                result.append(line);
            }
            System.out.println(result.toString());
            if (status == 200) {
                System.out.println("Notification sent successfully.");
            } else {
                System.out.println("Failed to send the notification!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            post.releaseConnection();
        }
        return true;
    }


}
